package com.example.springgobang.config;

import com.example.springgobang.aip.GameAPI;
import com.example.springgobang.aip.MatchAPI;
import com.example.springgobang.aip.TestAPI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;

// @EnableWebSocket 注解用来告诉 Spring 这是配置 WebSocket 的类
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    // 自动注入
    @Autowired
    private TestAPI testAPI;

    @Autowired
    private MatchAPI matchAPI;

    @Autowired
    private GameAPI gameAPI;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        // 当客户端连接 /test 这样的路径后就会触发 testAPI 进而调用其内部的方法
        registry.addHandler(testAPI,"/test");

        // 当客户端连接 /findMatch 这样的路径后就会触发 matchAPI 进而调用其内部的方法
        registry.addHandler(matchAPI,"/findMatch")
                // 把之前登录过程中往 HttpSession 中存放的 User 对象, 放到 WebSocket 的 session 中
                // 方便后面代码可以获取到当前的用户信息
                .addInterceptors(new HttpSessionHandshakeInterceptor());

        // 当客户端连接 /game 这样的路径后就会触发 gameAPI 进而调用其内部的方法
        registry.addHandler(gameAPI, "/game")
                // 把之前登录过程中往 HttpSession 中存放的 User 对象, 放到 WebSocket 的 session 中
                // 方便后面代码可以获取到当前的用户信息
                .addInterceptors(new HttpSessionHandshakeInterceptor());
    }
}
